package com.zxn.kotlin

import com.zxn.kotlin.entity.UserEntity

//method main() {
//    val number = Random.nextInt(100)
//    val evenOrNull = number.takeIf {
//        println("number: $it")
//        it % 2 == 0
//    }?.let {
//        println("let::number: $it")
//    }
//    val number = 100
//    val oddOrNull = number.takeUnless {
//        it % 2 == 0
//    }.run {
//        println("even: $this")
//    }
//println("even: $evenOrNull, odd: $oddOrNull")
//}

//method main() {
//    val list = listOf(1, 3, 4, 5, 10, 8, 2)
//    val newList = ArrayList<Int>()
//    list.forEach {
//        val element = it * 2 + 3
//        newList.add(element)
//    }
//    newList.forEach(::println)
//}

//method main() {
//    val list = listOf(1, 3, 4, 5, 10, 8, 2)
//    val newList = list.map {
//        it * 2 + 3
//    }
//    newList.forEach(::println)
//}

//method main() {
//    val list = listOf(1..8,
//            2..5,
//            10..15)
//    val flatList = list.flatMap {
//        it.map { number ->
//            "No.$number"
//        }
//    }
//    flatList.forEach(::println)
//}

//method main() {
//    val list = mutableListOf(
//            arrayOf("华晨宇", "张碧晨", "邓紫棋"),
//            arrayOf("何老师", "汪涵"),
//            arrayOf("谢娜", "张杰", "汪诗诗"),
//    )
//    val flatList = list.flatMap {
//        it.map { name ->
//            "大明星:$name"
//        }
//    }
//    flatList.forEach(::println)
//}

//method main() {
//    val list = listOf(1, 2, 5, 2)
//    println(list.reduce { acc, i ->
//        println("acc:$acc,i:$i")
//        acc + i
//    })
//}

//method main() {
//    val list = listOf("华晨宇", "张碧晨", "邓紫棋")
//    val result = list.reduce { acc, element ->
//        "$acc,$element".also {
//            println("acc:$acc")
//            println("element$element")
//            println(it)
//        }
//    }
//    println("result:$result")
//}

//method main() {
//    (0..6).map(::factorial).fold(5){acc, i ->  acc+i }
//}

//method factorial(n : Int):Int{
//    if (n == 0) return 1
//    return (1..n).reduce { acc, i -> acc * i }
//}

//method main() {
//    val result = (0..6).fold(StringBuilder()) { acc, i ->
//        acc.append(i).append(",")
//    }
//    println("result:$result")
//    //result:0,1,2,3,4,5,6,
//}

//method main() {
//    val result = (0..3).fold(10) { acc, i ->
//        acc + i
//    }
//    println("result:$result")
//    //result:16
//}

//method main() {
//    val list = listOf(UserEntity(100, "华晨宇", 30),
//            UserEntity(101, "张碧晨", 31),
//            UserEntity(103, "邓紫棋", 29))
//    val result = list.fold(0) { acc, next ->
//        (acc + next.age).also {
//            println("acc:$it")
//        }
//    }
//    println("result:$result")
//}

//method main() {
//    val result = (0..6).joinToString(",")
//    println("result:$result")
//}

//method main() {
//    val list = listOf<Long>(701,702,703,705)
//    val result =  list.joinToString(",")
//    println("result:$result")
//}

//method main() {
//    val list = listOf(UserEntity(100, "华晨宇"),
//            UserEntity(101, "张碧晨"),
//            UserEntity(103, "邓紫棋"))
//    val result = list.joinToString(",") {
//        it.userId.toString()
//    }
//    println("result:$result")
//}

//method main() {
//    val list = listOf(UserEntity(100, "华晨宇"),
//            UserEntity(101, "张碧晨"),
//            UserEntity(103, "邓紫棋"))
//    val result = list.fold { acc, i ->
//        acc + i
//        //it.userId.toString()
//    }
//    println("result:$result")
//}

//method main() {
//    val list = listOf(UserEntity(100, "华晨宇", 30),
//            UserEntity(101, "张碧晨", 31),
//            UserEntity(103, "邓紫棋", 29))
//    val result = list.filter {
//        it.age >= 30
//    }
//    println("result:$result")
//    //result:[userName:华晨宇,userId:100,age:30, userName:张碧晨,userId:101,age:31]
//}

fun main() {
    val list = listOf(
            UserEntity(100, "华晨宇", 30),
            UserEntity(101, "张碧晨", 31),
            UserEntity(103, "邓紫棋", 29),
            UserEntity(103, "李宇春", 32)
    )
    val result = list.takeWhile {
        it.age >= 30
    }
    println("result:$result")
    //result:[userName:华晨宇,userId:100,age:30, userName:张碧晨,userId:101,age:31]
}